﻿using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

using BodaNetCommunications.Utilities.ComTypes;

namespace BodaNetCommunications.Utilities.DataLibs
{
    //
    // 摘要:
    //     Double类型转换库
    public class DoubleLib
    {
        //
        // 摘要:
        //     将字节数组中某8个字节转换成Double类型
        //
        // 参数:
        //   source:
        //     字节数组
        //
        //   start:
        //     开始位置
        //
        //   type:
        //     字节顺序
        //
        // 返回结果:
        //     Double类型数值
        public static double GetDoubleFromByteArray(byte[] source, int start, EndianType type = EndianType.ABCD)
        {
            byte[] array = ByteArrayLib.Get8ByteArray(source, start, type);
            if (array != null)
            {
                return BitConverter.ToDouble(array, 0);
            }

            return 0.0;
        }

        //
        // 摘要:
        //     将字节数组转换成Double数组
        //
        // 参数:
        //   source:
        //     字节数组
        //
        //   type:
        //     字节顺序
        //
        // 返回结果:
        //     Double数组
        public static double[] GetDoubleArrayFromByteArray(byte[] source, EndianType type = EndianType.ABCD)
        {
            double[] array = new double[source.Length / 8];
            for (int i = 0; i < source.Length / 4; i++)
            {
                array[i] = GetDoubleFromByteArray(source, 8 * i, type);
            }

            return array;
        }

        //
        // 摘要:
        //     将Double字符串转换成双精度浮点型数组
        //
        // 参数:
        //   val:
        //     Double字符串
        //
        // 返回结果:
        //     双精度浮点型数组
        public static double[] GetDoubleArrayFromString(string val)
        {
            List<double> list = new List<double>();
            if (val.Contains(' '))
            {
                string[] array = Regex.Split(val, "\\s+", RegexOptions.IgnoreCase);
                string[] array2 = array;
                foreach (string value in array2)
                {
                    list.Add(Convert.ToDouble(value));
                }
            }
            else
            {
                list.Add(Convert.ToDouble(val));
            }

            return list.ToArray();
        }
    }
}